<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
    /*
    一，js数据运行的机制
     js执行，浏览器首先会形成一个全局作用域，代码自上而下执行
     运行基本数据类型的值和引用数据类型的值，操作有本质的不同
     
     基本数据类型：number,boolean,string,undefined,null
     引用数据类型：object，function，array，Date，Math，Errer....



     - 基本数据类型操作的是>值
        1，声明一个变量，默认值是undefined
        2，在这个作用域中分配一个位置给值
        3，把这个值赋值给变量
        var a=12;
        var b=a;
        b=13;
        console.log(a,b);

   */
    
   /*  
     - 引用数据类型操作的是内存空间
        1，在这个作用域中开辟一个内存空间，并给这个内存分配一个16进制的地址名
        2，把引用数据值存储到这个内存中（对象和数组是以键值对的形式存储，函数式是以代码字符串的形式存储）
        3，最后把16进制的地址名给对象（普通对象，数组，函数）
        以后要操作这个变量，通过地址名找到对应的内存空间
        var ary=[12,23];
         var ary2=ary;
         ary2[0]=100;
         
         console.log(ary,ary2);//100,23   
   */
   
   /*     
     -函数的创建和执行
        创建和对象数组一样，只不过存的是字符串
        执行：
        1，函数执行首先会形成一个私有的作用域
        2，形参赋值和变量提升
        3，通过内存地址找到对应的内存空间，把代码字符串变成真正的js代码
        4，代码自上而下执行 
        5，代码执行完成，是否有返回（return）
          function sum(){
        
        var total=0;
        for(var i=0; i<arguments.length;i++){
            var item=arguments[i];
            if(!isNaN(item)){//is not a number,true=>不是数字，false=>是数字
               total+=item;
            }
        }
        return total;
    }
  var s= sum(10,20,30,40,'aa','bb');

  console.log(s);
   */
   
     //1,拿到所有的数字
     //2,把所有的数字相加
  
    /*
    全局作用域和私有作用域执行，遇到基本数据类型的值，在当前作用域中分配一个位置存储这个值，
    遇到引用数据类型的值，会在当前作用域中开辟一个内存空间存储它的值

    二，堆栈，堆栈的作用，堆栈的销毁
      - 栈内存：不管是全局作用域还是私有作用域都叫着执行栈，栈内存
           作用：1，提供js运行的环境，2，保存基本数据类型的值
      - 堆内存：存储引用数据类型的内存空间，叫着堆内存
           作用：1，保存引用数据类型的值

      - 堆栈内存的销毁：
           栈内存的销毁：1，全局作用域销毁-->关闭浏览器
                       2，私有作用域销毁-->看是否被外面的变量占用
              
            堆内存的销毁：内存空间不被外面的变量占用，浏览器空闲的时候销毁这个内存空间


            
      - 浏览器的内存回收机制：     
            webkit内核的浏览器：每隔一段事件，都会循环查找是否有被占用的内存空间，
                             没有，就在浏览器空闲的时候，自主的销毁内存 
           ie浏览器：内存计数器：当内存被占用的时候，会在这个内存上加一个计数器，
                             每占用一次+1，减少一次占用就-1，是0的时候，被销毁
      - 如何销毁：
       1，全局作用域销毁-->关闭浏览器
       2，私有作用域，堆内存不被占用-->把占用内存空间的变量赋值为null
    */

 
    
    
     

    
    

    </script>
</body>
</html>